package com.example.demo.Impl;

import com.example.demo.entity.TestRecord;
import com.example.demo.repository.TestRecordRepository;
import com.example.demo.service.TestRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

/**
 * 测试记录服务实现类，用于操作 test_record 表。
 */
@Service
public class TestRecordServiceImpl implements TestRecordService {

    @Autowired
    private TestRecordRepository testRecordRepository;

    /**
     * 获取所有测试记录
     */
    @Override
    public List<TestRecord> getAllTestRecords() {
        return testRecordRepository.findAll();
    }

    /**
     * 根据ID获取某条测试记录
     */
    @Override
    public Optional<TestRecord> getTestRecordById(Long id) {
        return testRecordRepository.findById(id);
    }

    /**
     * 根据学生ID获取该学生的所有测试记录
     */
    @Override
    public List<TestRecord> getTestRecordsByStudentId(Long studentId) {
        return testRecordRepository.findByStudentId(studentId);
    }

    /**
     * 创建一条测试记录
     */
    @Override
    public TestRecord createTestRecord(TestRecord testRecord) {
        return testRecordRepository.save(testRecord);
    }

    /**
     * 根据ID更新测试记录
     */
    @Override
    public Optional<TestRecord> updateTestRecord(Long id, TestRecord updatedRecord) {
        return testRecordRepository.findById(id).map(record -> {
            record.setStudentId(updatedRecord.getStudentId());
            record.setTestTime(updatedRecord.getTestTime());
            record.setResult(updatedRecord.getResult());
            record.setResultType(updatedRecord.getResultType());
            return testRecordRepository.save(record);
        });
    }

    /**
     * 删除测试记录
     */
    @Override
    public boolean deleteTestRecord(Long id) {
        if (testRecordRepository.existsById(id)) {
            testRecordRepository.deleteById(id);
            return true;
        }
        return false;
    }
}
